#include "mapdragevent.h"
#include <QMouseEvent>

MapDragEvent::MapDragEvent(QObject *parent) : QObject(parent)
{

}

bool MapDragEvent::eventFilter(QObject *watched, QEvent *event)
{
    // 处理鼠标按下事件
    if (event->type() == QEvent::MouseButtonPress) {
        QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
        startPos = mouseEvent->pos();  // 记录鼠标按下时的初始位置
        return true;
    }
    // 处理鼠标移动事件
    else if (event->type() == QEvent::MouseMove) {
        QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event);
        // 计算鼠标移动的距离（当前位置 - 起始位置）
        QPoint delta = mouseEvent->pos() - startPos;

        // 发送位置变化信号
        updateMapPosition(delta);
        // 更新起始位置为当前位置，为下一次移动做准备
        startPos = mouseEvent->pos();
        return true;
    }
    // 处理鼠标释放事件
    else if (event->type() == QEvent::MouseButtonRelease) {
        return true;
    }
    // 对于其他类型的事件，交由基类处理
    return QObject::eventFilter(watched, event);
}

void MapDragEvent::updateMapPosition(const QPoint &delta)
{
    emit mapPositionChanged(delta);
}
